package com.gsocket.event.check;

/**
 * 645电能表协议校验
 *
 * @author sakura
 * @since 2024/03/05
 */
public class GW645ReadCheck extends CheckDecorator {
    public GW645ReadCheck(ReveCheck check) {
        super(check);
    }


    @Override
    public boolean check(byte[] msg) {
        if (msg == null) {
            return false;
        }

        boolean res;
        byte[][] ms = getMsg(msg);
        if (this.check != null) {
            for (byte[] m : ms) {
                int start = 20;
                for (; start < m.length; start++) {
                    if (m[start] == 0x68) {
                        break;
                    }
                }
                res = m.length > start + 9 && (m[start + 8] == (byte) 0x91 || m[start + 8] == (byte) 0x9e || m[start + 8] == (byte) 0x94);
                if (res) {
                    this.recvMsg = m;
                    return true;
                }
            }
            res = false;
        } else {
            res = true;
        }


        return res && super.check(msg);
    }


    @Override
    public byte[] getData(byte[] msg) {
        return super.getData(msg);
    }

}
